package cn.bearspark.common.dto;

import cn.bearspark.common.enumeration.RespCodeEnum;
import lombok.Getter;
import lombok.ToString;

import java.io.Serializable;

/**
 * 响应的数据传输对象的接口
 *
 * @param <T> 响应数据的类型
 * @author f
 */
@Getter
@ToString
public class ResponseDTO<T> implements Serializable {

    /**
     * 响应的码值
     */
    private int code;

    /**
     * 失败的原因
     */
    private String msg;

    /**
     * 成功的数据
     */
    private T data;

    /**
     * 构建一个不带数据的成功响应
     *
     * @return 成功响应
     */
    public static <T> ResponseDTO<T> success() {
        ResponseDTO<T> success = new ResponseDTO<>();
        success.code = RespCodeEnum.OK.getCode();
        return success;
    }

    /**
     * 构建一个成功的响应
     *
     * @param data 成功的数据
     * @return 成功响应
     */
    public static <T> ResponseDTO<T> success(T data) {
        ResponseDTO<T> success = new ResponseDTO<>();
        success.code = RespCodeEnum.OK.getCode();
        success.data = data;
        return success;
    }

    /**
     * 构建一个失败的响应
     *
     * @param code 失败的响应码
     * @param msg  失败的原因
     * @return 失败响应
     */
    public static <T> ResponseDTO<T> fail(int code, String msg) {
        ResponseDTO<T> fail = new ResponseDTO<>();
        fail.code = code;
        fail.msg = msg;
        return fail;
    }

}
